/**
 * ━━━━━━神兽出没━━━━━━
 * 　　　┏┓　　　┏┓
 * 　　┏┛┻━━━┛┻┓
 * 　　┃　　　　　　　┃
 * 　　┃　　　━　　　┃
 * 　　┃　┳┛　┗┳　┃
 * 　　┃　　　　　　　┃
 * 　　┃　　　┻　　　┃
 * 　　┃　　　　　　　┃
 * 　　┗━┓　　　┏━┛
 * 　　　　┃　　　┃神兽保佑, 永无BUG!
 * 　　　　┃　　　┃Code is far away from bug with the animal protecting
 * 　　　　┃　　　┗━━━┓
 * 　　　　┃　　　　　　　┣┓
 * 　　　　┃　　　　　　　┏┛
 * 　　　　┗┓┓┏━┳┓┏┛
 * 　　　　　┃┫┫　┃┫┫
 * 　　　　　┗┻┛　┗┻┛
 * ━━━━━━感觉萌萌哒━━━━━━
 */
package com.zkgengkun.support.util;

import com.google.common.collect.Lists;
import org.apache.commons.lang3.StringUtils;

import java.util.List;
import java.util.Map;

/**
 * @author gengshikun
 * @date 2017/8/22
 */
public class UrlUtil {

    public static boolean isMatchUrl(String url, Map<String, String> sysCacheMap) {
        if ("/".equals(url)) {    //首页
            return true;
        }

        //检查noPass
        for (Map.Entry<String, String> entry : sysCacheMap.entrySet()) {
            String furl = entry.getKey();
            String type = entry.getValue();
            if (furl.equals(url)) {
                if (type.equals("noPass")) {
                    return false;
                }
            }
        }

        boolean isMtch = false;
        for (Map.Entry<String, String> entry : sysCacheMap.entrySet()) {

            String furl = entry.getKey();
            String[] furlArray = furl.split("/");
            String[] urlArray = url.split("/");

            int sum = 0;
            List<Integer> matcher = Lists.newArrayList();
            for (int i = 0; i < furlArray.length; i++) {
                String node = furlArray[i];
                if (!node.equals("**") && StringUtils.isNotEmpty(node)) {
                    sum++;
                    for (int j = 0; j < urlArray.length; j++) {
                        String urlNode = urlArray[j];
                        if (urlNode.equals(node)) {
                            matcher.add(i);
                        }
                    }
                }
            }
            if (matcher.size() >= sum) {
                isMtch = true;
                for (int i = 0; i < matcher.size(); i++) {
                    int indexI = matcher.get(i);
                    for (int j = i + 1; j < matcher.size(); j++) {
                        int indexJ = matcher.get(j);
                        if (indexJ < indexI) {
                            return false;
                        }
                    }
                }
            }

        }
        return isMtch;
    }
}
